package cn.jingyuan.swan.system.service;

import cn.jingyuan.swan.system.domain.sys.entity.User;
import cn.jingyuan.swan.system.model.UserAccount;

public interface UserService {

    /**
     * 添加用户（内部账号，非三方账号）
     *
     * @param user 用户
     *
     * @return userId
     */
    Long addUser(User user);

    /**
     * 更新用户信息
     *
     * @param user 用户变更信息
     */
    void updateUser(User user);

    /**
     * 变更账户密码
     *
     * @param userId
     * @param password
     */
    void updatePassword(Long userId, String password);

    /**
     * 获取用户基础信息
     *
     * @param userId 用户 id
     *
     * @return 用户基础信息
     */
    User getUser(Long userId);

    /**
     * 依据登录名查询系统用户信息
     *
     * @param username 登录名
     *
     * @return 用户基础信息
     */
    User getByUsername(String username);

    User getByEmail(String email);

    User getByMobile(String mobile);

    /**
     * 获取用户信息和权限
     *
     * @param userId 用户 id
     *
     * @return 用户权限
     */
    UserAccount getUserAccount(Long userId);

    /**
     * 用户登录
     *
     * @param username 用户名
     *
     * @return 账号信息
     */
    UserAccount userLogin(String username);

    /**
     * 删除用户账号（删除用户且同时删除用户下所有账号）
     * <pre>
     *     <b>警告：危险操作</b>
     * </pre>
     *
     * @param userId 用户 id
     */
    void deleteUserAccount(Long userId);

}
